package com.spark.common.core.api;

import com.spark.common.core.entity.model.DictModel;
import com.spark.common.core.entity.model.SelectTableModel;
import com.spark.common.core.entity.model.SelectTreeTableModel;
import com.spark.common.core.entity.online.OnlineDataSource;
import com.spark.common.core.entity.params.SelectTableParams;
import com.spark.common.core.entity.params.SelectTableTreeParams;
import com.spark.common.core.entity.params.ValidExistDataParams;
import com.spark.common.core.entity.system.SysLoginLog;
import com.spark.common.core.entity.system.SysOperateLog;
import org.springframework.validation.annotation.Validated;

import java.util.List;
import java.util.Map;

/**
 * 系统通用API
 *
 * @author LYCHEE
 * @date 2025/2/20 09:40
 */
public interface SparkCommonApi {

    /**
     * 查询表中数据
     *
     * @param params 参数
     * @return 结果
     */
    List<SelectTableModel> querySelectTable(@Validated SelectTableParams params);

    /**
     * 查询树表中数据
     *
     * @param params 参数
     * @return 结果
     */
    List<SelectTreeTableModel> querySelectTreeTable(@Validated SelectTableTreeParams params);

    /**
     * 验证是否存在数据
     *
     * @param params 参数
     * @return 是否存在
     */
    boolean validExistData(@Validated ValidExistDataParams params);

    /**
     * 刷新字典缓存
     *
     * @param forceRefresh 强制刷新
     */
    void refreshDictCache(boolean forceRefresh);

    /**
     * 获取默认的数据源
     *
     * @return 默认数据源
     */
    OnlineDataSource queryDefaultDataSource();

    /**
     * 通过ID获取数据源
     *
     * @param id 主键
     * @return 数据源
     */
    OnlineDataSource queryDataSourceById(String id);

    /**
     * 刷新参数缓存
     *
     * @param forceRefresh 强制刷新
     */
    void refreshParamsCache(boolean forceRefresh);

    /**
     * 增加登录日志
     *
     * @param loginLog 登录信息
     */
    void addLoginLog(SysLoginLog loginLog);

    /**
     * 增加操作日志
     *
     * @param operateLog 日志
     */
    void addHandlerLog(SysOperateLog operateLog);

    /**
     * 字典表的 翻译，可批量
     *
     * @param table 表名
     * @param text  展示名
     * @param code  code
     * @param keys  多个用逗号分割
     * @return 字典翻译数据
     */
    List<DictModel> translateDictFromTableByKeys(String table, String text, String code, String keys);

    /**
     * 普通字典的翻译，根据多个dictCode和多条数据，多个以逗号分割
     *
     * @param dictCodes 例如：user_status,sex
     * @param keys      例如：1,2,0
     * @return 字典翻译数据
     */
    Map<String, List<DictModel>> translateManyDict(String dictCodes, String keys);
}
